package com.hmall.search.domain.vo;

import com.hmall.common.utils.CollUtils;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.util.List;

@Data
@NoArgsConstructor
@AllArgsConstructor
/**
 * 分页视图对象，用于封装分页查询结果
 *
 * @param <T> 分页数据的类型
 */
public class PageVO<T> {
    // 总记录数
    protected Long total;
    // 总页数
    protected Long pages;
    // 当前页的数据列表
    protected List<T> list;

    /**
     * 创建一个空的分页对象，即没有任何数据，但保留了总记录数和总页数的信息
     *
     * @param total 总记录数
     * @param pages 总页数
     * @param <T> 分页数据的类型
     * @return 返回一个空的分页对象
     */
    public static <T> PageVO<T> empty(Long total, Long pages) {
        return new PageVO<>(total, pages, CollUtils.emptyList());
    }

    /**
     * 创建一个包含指定数据的分页对象
     *
     * @param total 总记录数
     * @param pages 总页数
     * @param list 当前页的数据列表
     * @param <T> 分页数据的类型
     * @return 返回一个包含指定数据的分页对象
     */
    public static <T> PageVO<T> of(Long total, Long pages, List<T> list) {
        return new PageVO<>(total, pages, list);
    }
}
